package q1342_numberOfSteps;

public class Solution {
    /*
    如果直接使用题设中的做法 也就是偶数除以2 奇数减1 也能够AC该题
    但是为了提高效率 直接使用位运算：
    对于一个数字 直接判断：
    当前的最后位是否为1 如果是1 代表此时是一个奇数 需要加上减1的步骤
    当前数字是否大于1（也就是大于等于2） 如果满足 代表还需要除以2 因此还要加一个步骤
    这样通过位运算可以每次判断两个步骤 每次计算后num右移一位 直到变成0
     */
    public int numberOfSteps(int num) {
        int ret = 0;
        while (num > 0) {
            ret += (num > 1 ? 1 : 0) + (num & 0x01);
            num >>= 1;
        }
        return ret;
    }
}
